import java.util.ArrayList;


public class Agregados {
	public static Pessoa paiDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		Pessoa pai = null;
		for(int i = 0; i < pessoas.size();i++)
		{
			if(pessoas.get(i).getNome().equals(pessoa.getPai()))
			{
				pai = pessoas.get(i);
			}
		}
		return pai;
	}
	public static Pessoa maeDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		Pessoa mae = null;
		for(int i = 0; i < pessoas.size();i++)
		{
			if(pessoas.get(i).getNome().equals(pessoa.getMae()))
			{
				mae = pessoas.get(i);
			}
		}
		return mae;
	}
	public static ArrayList<Pessoa> filhosDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		ArrayList<Pessoa> filhos = new ArrayList<Pessoa>();
		for(int i = 0; i < pessoas.size();i++)
		{
			if(pessoas.get(i).getPai().equals(pessoa.getNome()) || 
					pessoas.get(i).getMae().equals(pessoa.getNome()))
			{
				filhos.add(pessoas.get(i));
			}
		}
		return filhos;
	}
	public static ArrayList<Pessoa> irmaosDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		ArrayList<Pessoa> irmaos = new ArrayList<Pessoa>();
		for(int i = 0; i < pessoas.size();i++)
		{
			if(pessoa != null)
			{
				if(!pessoa.getPai().equals(""))
				{
					if(pessoas.get(i).getPai().equals(pessoa.getPai()))
					{
						if(!pessoas.get(i).equals(pessoa))
							if(!irmaos.contains(pessoas.get(i)))
							{
								irmaos.add(pessoas.get(i));
							}
					}
				}
				if(!pessoa.getMae().equals(""))
				{
					if(pessoas.get(i).getMae().equals(pessoa.getMae()))
					{
						if(!pessoas.get(i).equals(pessoa))
							if(!irmaos.contains(pessoas.get(i)))
							{
								irmaos.add(pessoas.get(i));
							}
					}
				}
			}
		}
		return irmaos;
	}
	public static ArrayList<Pessoa> netosDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		Pessoa parent = null;
		ArrayList<Pessoa> netos = new ArrayList<Pessoa>();
		for(int i = 0; i < pessoas.size(); i++)
		{
			for(int j = 0; j < pessoas.size(); j++)
			{
				if(pessoas.get(i).getPai().equals(pessoas.get(j).getNome()) ||
						pessoas.get(i).getMae().equals(pessoas.get(j).getNome()))
					
				{
					parent = pessoas.get(j);
				}
				if(parent != null)
				{
					if(parent.getPai().equals(pessoa.getNome()) ||
							parent.getMae().equals(pessoa.getNome()))
						
					{
						if(!netos.contains(pessoas.get(i)))
						{
							netos.add(pessoas.get(i));
						}
					}
				}
			}
		}
		return netos;
	}
	public static ArrayList<Pessoa> tiosDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		ArrayList<Pessoa> tios = new ArrayList<Pessoa>();
		tios.addAll(irmaosDe(paiDe(pessoa,pessoas),pessoas));
		tios.addAll(irmaosDe(maeDe(pessoa,pessoas),pessoas));
		for(int i = 0; i< tios.size(); i++)
		{
			if(!tios.get(i).getCasadoCom().equals(""))
			{
				for(int j = 0; j < pessoas.size(); j++)
				{
					if(tios.get(i).getCasadoCom().equals(pessoas.get(j).getNome()))
					{
						if(!tios.contains(pessoas.get(j)))
						{
							tios.add(pessoas.get(j));
						}
					}
				}
			}
		}
		return tios;
	}
	public static ArrayList<Pessoa> primosDe(Pessoa pessoa, ArrayList<Pessoa> pessoas)
	{
		ArrayList<Pessoa> primos = new ArrayList<Pessoa>();
		ArrayList<Pessoa> primosAux = new ArrayList<Pessoa>();
		ArrayList<Pessoa> tios = new ArrayList<Pessoa>();
		tios = tiosDe(pessoa,pessoas);
		for(int i = 0; i < tios.size(); i++)
		{
			primosAux = filhosDe(tios.get(i),pessoas);
			for(int j = 0; j < primosAux.size(); j++)
			{
				if(!primos.contains(primosAux.get(j)))
				{
					primos.add(primosAux.get(j));
				}
			}
		}
		return primos;
	}
}
